#include <stdio.h>

int main() {
    // 数组声明
    int array[5] = {1, 2, 3, 4, 5};

    // 数组下标从0开始
    printf("第一个元素: %d\n", array[0]);

    // C编译器不做数组边界检查
    // 注意：这是危险的，可能会导致未定义的行为
    printf("访问未声明的数组下标项: %d(%x)\n", array[5], array[5]);

    // 数组的实质是指向一组连续内存空间的指针
    printf("数组的内存地址: %p\n", array);

    // 数组名表示的是数组中第一个元素的内存位置
    printf("第一个元素的内存地址: %p\n", &array[0]);

    // 字符串就是一个char类型的数组，最后一个元素为NULL(\0)
    char str[] = "hello";
    printf("字符串: %s\n", str);
    printf("字符串最后一个元素: %c(%x)\n", str[5], str[5]);  // 输出 '\0'

    return 0;
}
